/**
 * 
 */
package compilador.analizadorSintactico.categoriasSintacticas;

import javax.swing.tree.DefaultMutableTreeNode;

import compilador.analizadorLexico.simbolos.SimboloLexico;
import compilador.analizadorSemantico.tablaSimbolos.SimboloSemantico;
import compilador.analizadorSemantico.tablaSimbolos.TablaSimboloSemantico;
import compilador.interfaces.Asignable;

/**
 * @author samsung
 *
 */
public class IdentificadorValor implements Asignable{
	
	//----------------------------------------------------------------------------------
	//										Atributos
	//----------------------------------------------------------------------------------
	
	private SimboloLexico identificador;

	//----------------------------------------------------------------------------------
	//										Constructor
	//----------------------------------------------------------------------------------
	
	public IdentificadorValor(SimboloLexico identificador){
		this.identificador = identificador;
	}
	
	//----------------------------------------------------------------------------------
	//									Metodos
	//----------------------------------------------------------------------------------
	
	/* (non-Javadoc)
	 * @see co.edu.uniquindio.ingesis.analizadorSemantico.interfaces.Asignable#getJavaCode()
	 */
	@Override
	public String getJavaCode() {
		return identificador.getLexema();
	}

	/* (non-Javadoc)
	 * @see co.edu.uniquindio.ingesis.analizadorSemantico.interfaces.Asignable#getArbolVisual()
	 */
	@Override
	public DefaultMutableTreeNode getArbolVisual() {
		DefaultMutableTreeNode root = new DefaultMutableTreeNode("Valor");
		root.add(new DefaultMutableTreeNode(identificador.getLexema()));
		
		return root;
	}
	
	/* (non-Javadoc)
	 * @see compilador.interfaces.Asignable#determinarTipoDato()
	 */
	@Override
	public String determinarTipoDato(TablaSimboloSemantico ts, String claseActual, String metodoActual) {
		SimboloSemantico ss = ts.getSimbolo(identificador.getLexema(), metodoActual);
		
		if(ss != null){
			return ss.getTipoDato();
		}
		
		ss = ts.getSimbolo(identificador.getLexema(), claseActual);
		
		if(ss != null){
			return ss.getTipoDato();
		}
		
		return null;
	}
	
	//----------------------------------------------------------------------------------
	//									Getters and Setters
	//----------------------------------------------------------------------------------
	
	/**
	 * Metodo que nos retorna el valor de identificador
	 * @return  identificador. Valor retornado
	 */
	public SimboloLexico getIdentificador() {
		return identificador;
	}

	/**
	 * Metodo que permite asignar el valor de identificador
	 * @param identificador. Valor a asignar identificador
	 */
	public void setIdentificador(SimboloLexico identificador) {
		this.identificador = identificador;
	}

}
